Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


LXST/Filters.py 0.4.7 (cdaf47c2) Text, 12.74 KB

Tff7b72from T7ee787importlibT7ee787.T7ee787util Tff7b72import Te6edf3find_spec
Tff7b72import T7ee787numpy Tff7b72as T7ee787np
Tff7b72import T7ee787time
Tff7b72import T7ee787RNS
Tff7b72import T7ee787os

Te6edf3USE_NATIVE_FILTERS Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Te6edf3find_specTb4b4b4(Ta5d6ff"Ta5d6ffcffiTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not load CFFI module for filter acceleration, falling back to Python filters. This will be slow.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffMake sure that the CFFI module is installed and available.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72from T7ee787cffi Tff7b72import Te6edf3FFI
Tff7b72import T7ee787pathlib
Te6edf3c_src_path Tff7b72= Te6edf3pathlibTff7b72.Td2a8ffPathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffparentTff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)
Te6edf3ffi Tff7b72= Te6edf3FFITb4b4b4(Tb4b4b4)

Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_windowsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3filterlib_spec Tff7b72= Te6edf3find_specTb4b4b4(Ta5d6ff"Ta5d6ffLXST.filterlibTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3filterlib_spec Tff7b72or Te6edf3filterlib_specTff7b72.Td2a8fforigin Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72raise Tf85149ImportErrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not locate pre-compiled LXST.filterlib moduleTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3c_src_pathTb4b4b4, Ta5d6ff"Ta5d6ffFilters.hTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4: Te6edf3ffiTff7b72.Td2a8ffcdefTb4b4b4(Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3native_functions Tff7b72= Te6edf3ffiTff7b72.Td2a8ffdlopenTb4b4b4(Te6edf3filterlib_specTff7b72.Td2a8fforiginTb4b4b4)
Te6edf3USE_NATIVE_FILTERS Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3c_src_pathTb4b4b4, Ta5d6ff"Ta5d6ffFilters.hTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4: Te6edf3ffiTff7b72.Td2a8ffcdefTb4b4b4(Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3native_functions Tff7b72= Te6edf3ffiTff7b72.Td2a8ffdlopenTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3c_src_pathTb4b4b4, Ta5d6ff"Ta5d6fffilterlib.dllTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3USE_NATIVE_FILTERS Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not load pre-compiled LXST filters library. The contained exception was: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAttempting to compile library from source...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)

Tff7b72if Te6edf3USE_NATIVE_FILTERS Tff7b72== Tff7b72FalseTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3c_src_pathTb4b4b4, Ta5d6ff"Ta5d6ffFilters.hTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4: Te6edf3ffiTff7b72.Td2a8ffcdefTb4b4b4(Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3c_src_pathTb4b4b4, Ta5d6ff"Ta5d6ffFilters.cTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4: Te6edf3c_src Tff7b72= Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3native_functions Tff7b72= Te6edf3ffiTff7b72.Td2a8ffverifyTb4b4b4(Te6edf3c_srcTb4b4b4)
Te6edf3USE_NATIVE_FILTERS Tff7b72= Tff7b72True
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSuccessfully compiled and loaded filters libraryTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not compile modules for filter acceleration, falling back to Python filters. This will be slow.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffThe contained exception was: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Te6edf3USE_NATIVE_FILTERS Tff7b72= Tff7b72False

Tff7b72class T56d364FilterTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffhandle_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149NotImplementedErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffThe handle_frame method was not implemented on Tffd700{Tff7b72selfTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72class T56d364HighPassTb4b4b4(Te6edf3FilterTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cutTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcut Tff7b72= Te6edf3cut
Tff7b72selfTff7b72.Td2a8ff_samplerate Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_last_inputs Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72= Tff7b72None
Tff7b72def Td2a8ffhandle_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4, Te6edf3samplerateTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3frameTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4: Tff7b72return Te6edf3frame
Tff7b72if Te6edf3samplerate Tff7b72!= Tff7b72selfTff7b72.Td2a8ff_samplerateTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_samplerate Tff7b72= Te6edf3samplerate
Te6edf3dt Tff7b72= T79c0ff1.0 Tff7b72/ Tff7b72selfTff7b72.Td2a8ff_samplerate
Te6edf3rc Tff7b72= T79c0ff1.0 Tff7b72/ Tb4b4b4(T79c0ff2 Tff7b72* Te6edf3npTff7b72.Td2a8ffpi Tff7b72* Tff7b72selfTff7b72.Td2a8ffcutTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72= Te6edf3rc Tff7b72/ Tb4b4b4(Te6edf3rc Tff7b72+ Te6edf3dtTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4: Te6edf3frame_2d Tff7b72= Te6edf3frameTff7b72.Td2a8ffreshapeTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3frame_2d Tff7b72= Te6edf3frame
Te6edf3samplesTb4b4b4, Te6edf3channels Tff7b72= Te6edf3frame_2dTff7b72.Td2a8ffshape
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72is Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72!= Te6edf3channelsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72= Te6edf3channels
Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72= Te6edf3npTff7b72.Td2a8ffzerosTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_channelsTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_last_inputs Tff7b72= Te6edf3npTff7b72.Td2a8ffzerosTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_channelsTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Tff7b72if Te6edf3USE_NATIVE_FILTERSTb4b4b4:
Te6edf3frame_2d Tff7b72= Te6edf3npTff7b72.Td2a8ffascontiguousarrayTb4b4b4(Te6edf3frame_2dTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Te6edf3output Tff7b72= Te6edf3npTff7b72.Td2a8ffempty_likeTb4b4b4(Te6edf3frame_2dTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Te6edf3input_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Te6edf3frame_2dTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3output_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Te6edf3outputTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3states_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_filter_statesTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3last_inputs_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_last_inputsTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3native_functionsTff7b72.Td2a8ffhighpass_filterTb4b4b4(Te6edf3input_ptrTb4b4b4, Te6edf3output_ptrTb4b4b4, Te6edf3samplesTb4b4b4, Te6edf3channelsTb4b4b4, Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_alphaTb4b4b4)Tb4b4b4, Te6edf3states_ptrTb4b4b4, Te6edf3last_inputs_ptrTb4b4b4)
Te6edf3result Tff7b72= Te6edf3outputTff7b72.Td2a8ffreshapeTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4)
Tff7b72return Te6edf3result

Tff7b72elseTb4b4b4:
Te6edf3output Tff7b72= Te6edf3npTff7b72.Td2a8ffempty_likeTb4b4b4(Te6edf3frame_2dTb4b4b4)
Te6edf3input_diff_first Tff7b72= Te6edf3frame_2dTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72- Tff7b72selfTff7b72.Td2a8ff_last_inputs
Te6edf3outputTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72* Tb4b4b4(Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72+ Te6edf3input_diff_firstTb4b4b4)
Te6edf3input_diff Tff7b72= Te6edf3npTff7b72.Td2a8ffempty_likeTb4b4b4(Te6edf3frame_2dTb4b4b4)
Te6edf3input_diffTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Te6edf3input_diff_first
Te6edf3input_diffTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4] Tff7b72= Te6edf3frame_2dTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4] Tff7b72- Te6edf3frame_2dTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]

Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3samplesTb4b4b4)Tb4b4b4:
Te6edf3outputTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72* Tb4b4b4(Te6edf3outputTb4b4b4[Te6edf3iTff7b72-T79c0ff1Tb4b4b4] Tff7b72+ Te6edf3input_diffTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)

Te6edf3output Tff7b72= Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72* Tb4b4b4(Te6edf3output Tff7b72+ Te6edf3input_diffTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72= Te6edf3outputTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_last_inputs Tff7b72= Te6edf3frame_2dTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Te6edf3nframe Tff7b72= Te6edf3outputTff7b72.Td2a8ffreshapeTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4)
Tff7b72return Te6edf3nframe

Tff7b72class T56d364LowPassTb4b4b4(Te6edf3FilterTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cutTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcut Tff7b72= Te6edf3cut
Tff7b72selfTff7b72.Td2a8ff_samplerate Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72= Tff7b72None
Tff7b72def Td2a8ffhandle_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4, Te6edf3samplerateTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3frameTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4: Tff7b72return Te6edf3frame
Tff7b72if Te6edf3samplerate Tff7b72!= Tff7b72selfTff7b72.Td2a8ff_samplerateTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_samplerate Tff7b72= Te6edf3samplerate
Te6edf3dt Tff7b72= T79c0ff1.0 Tff7b72/ Tff7b72selfTff7b72.Td2a8ff_samplerate
Te6edf3rc Tff7b72= T79c0ff1.0 Tff7b72/ Tb4b4b4(T79c0ff2 Tff7b72* Te6edf3npTff7b72.Td2a8ffpi Tff7b72* Tff7b72selfTff7b72.Td2a8ffcutTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72= Te6edf3dt Tff7b72/ Tb4b4b4(Te6edf3rc Tff7b72+ Te6edf3dtTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4: Te6edf3frame_2d Tff7b72= Te6edf3frameTff7b72.Td2a8ffreshapeTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3frame_2d Tff7b72= Te6edf3frame
Te6edf3samplesTb4b4b4, Te6edf3channels Tff7b72= Te6edf3frame_2dTff7b72.Td2a8ffshape
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72is Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72!= Te6edf3channelsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72= Te6edf3channels
Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72= Te6edf3npTff7b72.Td2a8ffzerosTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_channelsTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)

Tff7b72if Te6edf3USE_NATIVE_FILTERSTb4b4b4:
Te6edf3frame_2d Tff7b72= Te6edf3npTff7b72.Td2a8ffascontiguousarrayTb4b4b4(Te6edf3frame_2dTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Te6edf3output Tff7b72= Te6edf3npTff7b72.Td2a8ffempty_likeTb4b4b4(Te6edf3frame_2dTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Te6edf3input_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Te6edf3frame_2dTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3output_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Te6edf3outputTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3states_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_filter_statesTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3native_functionsTff7b72.Td2a8fflowpass_filterTb4b4b4(Te6edf3input_ptrTb4b4b4, Te6edf3output_ptrTb4b4b4, Te6edf3samplesTb4b4b4, Te6edf3channelsTb4b4b4, Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_alphaTb4b4b4)Tb4b4b4, Te6edf3states_ptrTb4b4b4)
Tff7b72return Te6edf3outputTff7b72.Td2a8ffreshapeTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3output Tff7b72= Te6edf3npTff7b72.Td2a8ffempty_likeTb4b4b4(Te6edf3frame_2dTb4b4b4)
Te6edf3outputTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72* Te6edf3frame_2dTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ Tb4b4b4(T79c0ff1.0 Tff7b72- Tff7b72selfTff7b72.Td2a8ff_alphaTb4b4b4) Tff7b72* Tff7b72selfTff7b72.Td2a8ff_filter_states
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3samplesTb4b4b4)Tb4b4b4:
Te6edf3outputTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ff_alpha Tff7b72* Te6edf3frame_2dTb4b4b4[Te6edf3iTb4b4b4] Tff7b72+ Tb4b4b4(T79c0ff1.0 Tff7b72- Tff7b72selfTff7b72.Td2a8ff_alphaTb4b4b4) Tff7b72* Te6edf3outputTb4b4b4[Te6edf3iTff7b72-T79c0ff1Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_filter_states Tff7b72= Te6edf3outputTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3outputTff7b72.Td2a8ffreshapeTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4)

Tff7b72class T56d364BandPassTb4b4b4(Te6edf3FilterTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3low_cutTb4b4b4, Te6edf3high_cutTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3low_cut Tff7b72>Tff7b72= Te6edf3high_cutTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffLow-cut frequency must be less than high-cut frequencyTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflow_cut Tff7b72= Te6edf3low_cut
Tff7b72selfTff7b72.Td2a8ffhigh_cut Tff7b72= Te6edf3high_cut
Tff7b72selfTff7b72.Td2a8ff_high_pass Tff7b72= Te6edf3HighPassTb4b4b4(Tff7b72selfTff7b72.Td2a8fflow_cutTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_low_pass Tff7b72= Te6edf3LowPassTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhigh_cutTb4b4b4)
Tff7b72def Td2a8ffhandle_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4, Te6edf3samplerateTb4b4b4)Tb4b4b4:
T8b949e# TODO: Remove debug
Te6edf3st Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3frameTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4: Tff7b72return Te6edf3frame
Te6edf3high_passed Tff7b72= Tff7b72selfTff7b72.Td2a8ff_high_passTff7b72.Td2a8ffhandle_frameTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3samplerateTb4b4b4)
Te6edf3band_passed Tff7b72= Tff7b72selfTff7b72.Td2a8ff_low_passTff7b72.Td2a8ffhandle_frameTb4b4b4(Te6edf3high_passedTb4b4b4, Te6edf3samplerateTb4b4b4)
Te6edf3dt Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3st
Tff7b72if Te6edf3dt Tff7b72> T79c0ff0.010Tb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSlow filter processing detected: Filter ran in Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyshorttimeTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3stTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3band_passed

Tff7b72class T56d364AGCTb4b4b4(Te6edf3FilterTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3target_levelTff7b72=Tff7b72-T79c0ff12.0Tb4b4b4, Te6edf3max_gainTff7b72=T79c0ff12.0Tb4b4b4, Te6edf3attack_timeTff7b72=T79c0ff0.0001Tb4b4b4, Te6edf3release_timeTff7b72=T79c0ff0.002Tb4b4b4, Te6edf3hold_timeTff7b72=T79c0ff0.001Tb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftrigger_level Tff7b72= T79c0ff0.003
Tff7b72selfTff7b72.Td2a8fftarget_level Tff7b72= Te6edf3target_level T8b949e# In dBFS
Tff7b72selfTff7b72.Td2a8ffmax_gain_db Tff7b72= Te6edf3max_gain
Tff7b72selfTff7b72.Td2a8ffattack_time Tff7b72= Te6edf3attack_time
Tff7b72selfTff7b72.Td2a8ffrelease_time Tff7b72= Te6edf3release_time
Tff7b72selfTff7b72.Td2a8ffhold_time Tff7b72= Te6edf3hold_time
Tff7b72selfTff7b72.Td2a8fftarget_linear Tff7b72= T79c0ff10 Tff7b72*Tff7b72* Tb4b4b4(Te6edf3target_level Tff7b72/ T79c0ff10Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmax_gain_linear Tff7b72= T79c0ff10 Tff7b72*Tff7b72* Tb4b4b4(Te6edf3max_gain Tff7b72/ T79c0ff10Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_samplerate Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_current_gain_lin Tff7b72= T79c0ff1.0
Tff7b72selfTff7b72.Td2a8ff_hold_counter Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ff_block_target_s Tff7b72= T79c0ff0.01
Tff7b72selfTff7b72.Td2a8ff_attack_coeff Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_release_coeff Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_hold_samples Tff7b72= Tff7b72None
Tff7b72def Td2a8ffhandle_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4, Te6edf3samplerateTb4b4b4)Tb4b4b4:
T8b949e# TODO: Remove debug
T8b949e# st = time.time()
Tff7b72if Tffa657lenTb4b4b4(Te6edf3frameTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4: Tff7b72return Te6edf3frame
Tff7b72if Tffa657lenTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4: Te6edf3frame_2d Tff7b72= Te6edf3frameTff7b72.Td2a8ffreshapeTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3frame_2d Tff7b72= Te6edf3frame
Te6edf3samplesTb4b4b4, Te6edf3channels Tff7b72= Te6edf3frame_2dTff7b72.Td2a8ffshape
Tff7b72if Te6edf3samplerate Tff7b72!= Tff7b72selfTff7b72.Td2a8ff_samplerateTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_samplerate Tff7b72= Te6edf3samplerate
Tff7b72selfTff7b72.Td2a8ff_block_target Tff7b72= Tffa657intTb4b4b4(Tb4b4b4(Te6edf3samplesTff7b72/Tff7b72selfTff7b72.Td2a8ff_samplerateTb4b4b4)Tff7b72/Tff7b72selfTff7b72.Td2a8ff_block_target_sTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_calculate_coefficientsTb4b4b4(Tb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72is Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72!= Te6edf3channelsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_channels Tff7b72= Te6edf3channels
Tff7b72selfTff7b72.Td2a8ff_current_gain_lin Tff7b72= Te6edf3npTff7b72.Td2a8ffonesTb4b4b4(Te6edf3channelsTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_hold_counter Tff7b72= T79c0ff0

Tff7b72if Te6edf3USE_NATIVE_FILTERSTb4b4b4:
Te6edf3frame_2d Tff7b72= Te6edf3npTff7b72.Td2a8ffascontiguousarrayTb4b4b4(Te6edf3frame_2dTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Te6edf3output Tff7b72= Te6edf3npTff7b72.Td2a8ffempty_likeTb4b4b4(Te6edf3frame_2dTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Te6edf3input_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Te6edf3frame_2dTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3output_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Te6edf3outputTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3gain_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffcastTb4b4b4(Ta5d6ff"Ta5d6fffloat *Ta5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_current_gain_linTff7b72.Td2a8ffctypesTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3hold_ptr Tff7b72= Te6edf3ffiTff7b72.Td2a8ffnewTb4b4b4(Ta5d6ff"Ta5d6ffint *Ta5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_hold_counterTb4b4b4)
Te6edf3native_functionsTff7b72.Td2a8ffagc_processTb4b4b4(
Te6edf3input_ptrTb4b4b4, Te6edf3output_ptrTb4b4b4, Te6edf3samplesTb4b4b4, Te6edf3channelsTb4b4b4,
Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8fftarget_linearTb4b4b4)Tb4b4b4, Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmax_gain_linearTb4b4b4)Tb4b4b4,
Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8fftrigger_levelTb4b4b4)Tb4b4b4,
Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_attack_coeffTb4b4b4)Tb4b4b4, Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_release_coeffTb4b4b4)Tb4b4b4,
Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_hold_samplesTb4b4b4)Tb4b4b4,
Te6edf3gain_ptrTb4b4b4, Te6edf3hold_ptrTb4b4b4, Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_block_targetTb4b4b4)
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_hold_counter Tff7b72= Te6edf3hold_ptrTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3result Tff7b72= Te6edf3outputTff7b72.Td2a8ffreshapeTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4)
T8b949e# TODO: Remove debug
T8b949e# RNS.log(f"AGC ran in {RNS.prettyshorttime(time.time()-st)}", RNS.LOG_DEBUG)
Tff7b72return Te6edf3result

Tff7b72elseTb4b4b4:
Te6edf3output Tff7b72= Te6edf3npTff7b72.Td2a8ffempty_likeTb4b4b4(Te6edf3frame_2dTb4b4b4)
Te6edf3block_size Tff7b72= Tffa657maxTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3samples Tff7b72/Tff7b72/ Tff7b72selfTff7b72.Td2a8ff_block_targetTb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3samplesTb4b4b4, Te6edf3block_sizeTb4b4b4)Tb4b4b4:
Te6edf3block_end Tff7b72= Tffa657minTb4b4b4(Te6edf3i Tff7b72+ Te6edf3block_sizeTb4b4b4, Te6edf3samplesTb4b4b4)
Te6edf3block Tff7b72= Te6edf3frame_2dTb4b4b4[Te6edf3iTb4b4b4:Te6edf3block_endTb4b4b4]
Te6edf3block_samples Tff7b72= Te6edf3block_end Tff7b72- Te6edf3i
Te6edf3rms Tff7b72= Te6edf3npTff7b72.Td2a8ffsqrtTb4b4b4(Te6edf3npTff7b72.Td2a8ffmeanTb4b4b4(Te6edf3block Tff7b72*Tff7b72* T79c0ff2Tb4b4b4, Te6edf3axisTff7b72=T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3target_gain Tff7b72= Te6edf3npTff7b72.Td2a8ffwhereTb4b4b4(Te6edf3rms Tff7b72> T79c0ff1e-9Tb4b4b4, Tff7b72selfTff7b72.Td2a8fftarget_linear Tff7b72/ Te6edf3npTff7b72.Td2a8ffmaximumTb4b4b4(Te6edf3rmsTb4b4b4, T79c0ff1e-9Tb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffmax_gain_linearTb4b4b4)
Te6edf3target_gain Tff7b72= Te6edf3npTff7b72.Td2a8ffminimumTb4b4b4(Te6edf3target_gainTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmax_gain_linearTb4b4b4)
Te6edf3smoothed_gain Tff7b72= Te6edf3npTff7b72.Td2a8ffempty_likeTb4b4b4(Te6edf3target_gainTb4b4b4)
Tff7b72for Te6edf3ch Tff7b72in Tffa657rangeTb4b4b4(Te6edf3channelsTb4b4b4)Tb4b4b4:
Tff7b72if Tb4b4b4(Te6edf3rmsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72< Tff7b72selfTff7b72.Td2a8fftrigger_levelTb4b4b4)Tb4b4b4: Te6edf3target_gain Tff7b72= Tff7b72selfTff7b72.Td2a8ff_current_gain_lin
Tff7b72if Te6edf3target_gainTb4b4b4[Te6edf3chTb4b4b4] Tff7b72< Tff7b72selfTff7b72.Td2a8ff_current_gain_linTb4b4b4[Te6edf3chTb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_current_gain_linTb4b4b4[Te6edf3chTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ff_attack_coeff Tff7b72* Te6edf3target_gainTb4b4b4[Te6edf3chTb4b4b4] Tff7b72+ Tb4b4b4(T79c0ff1 Tff7b72- Tff7b72selfTff7b72.Td2a8ff_attack_coeffTb4b4b4) Tff7b72* Tff7b72selfTff7b72.Td2a8ff_current_gain_linTb4b4b4[Te6edf3chTb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_hold_counter Tff7b72= Tff7b72selfTff7b72.Td2a8ff_hold_samples T8b949e# Reset hold counter
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_hold_counter Tff7b72> T79c0ff0Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_hold_counter Tff7b72-Tff7b72= Te6edf3block_samples
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_current_gain_linTb4b4b4[Te6edf3chTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ff_release_coeff Tff7b72* Te6edf3target_gainTb4b4b4[Te6edf3chTb4b4b4] Tff7b72+ Tb4b4b4(T79c0ff1 Tff7b72- Tff7b72selfTff7b72.Td2a8ff_release_coeffTb4b4b4) Tff7b72* Tff7b72selfTff7b72.Td2a8ff_current_gain_linTb4b4b4[Te6edf3chTb4b4b4]
Te6edf3smoothed_gainTb4b4b4[Te6edf3chTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ff_current_gain_linTb4b4b4[Te6edf3chTb4b4b4]
Te6edf3outputTb4b4b4[Te6edf3iTb4b4b4:Te6edf3block_endTb4b4b4] Tff7b72= Te6edf3block Tff7b72* Te6edf3smoothed_gainTb4b4b4[Te6edf3npTff7b72.Td2a8ffnewaxisTb4b4b4, Tb4b4b4:Tb4b4b4]
Te6edf3peak_limit Tff7b72= T79c0ff0.75
Te6edf3current_peaks Tff7b72= Te6edf3npTff7b72.Td2a8ffmaxTb4b4b4(Te6edf3npTff7b72.Td2a8ffabsTb4b4b4(Te6edf3outputTb4b4b4)Tb4b4b4, Te6edf3axisTff7b72=T79c0ff0Tb4b4b4)
Te6edf3limit_gain Tff7b72= Te6edf3npTff7b72.Td2a8ffwhereTb4b4b4(Te6edf3current_peaks Tff7b72> Te6edf3peak_limitTb4b4b4, Te6edf3peak_limit Tff7b72/ Te6edf3npTff7b72.Td2a8ffmaximumTb4b4b4(Te6edf3current_peaksTb4b4b4, T79c0ff1e-9Tb4b4b4)Tb4b4b4, T79c0ff1.0Tb4b4b4)

Tff7b72if Te6edf3npTff7b72.Td2a8ffanyTb4b4b4(Te6edf3limit_gain Tff7b72< T79c0ff1.0Tb4b4b4)Tb4b4b4: Te6edf3output Tff7b72*Tff7b72= Te6edf3limit_gainTb4b4b4[Te6edf3npTff7b72.Td2a8ffnewaxisTb4b4b4, Tb4b4b4:Tb4b4b4]
Te6edf3nframe Tff7b72= Te6edf3outputTff7b72.Td2a8ffreshapeTb4b4b4(Te6edf3frameTff7b72.Td2a8ffshapeTb4b4b4)
T8b949e# TODO: Remove debug
T8b949e# RNS.log(f"AGC ran in {RNS.prettyshorttime(time.time()-st)}", RNS.LOG_DEBUG)
Tff7b72return Te6edf3nframe
Tff7b72def Td2a8ff_calculate_coefficientsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_samplerateTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_attack_coeff Tff7b72= T79c0ff1.0 Tff7b72- Te6edf3npTff7b72.Td2a8ffexpTb4b4b4(Tff7b72-T79c0ff1.0 Tff7b72/ Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffattack_time Tff7b72* Tff7b72selfTff7b72.Td2a8ff_samplerateTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_release_coeff Tff7b72= T79c0ff1.0 Tff7b72- Te6edf3npTff7b72.Td2a8ffexpTb4b4b4(Tff7b72-T79c0ff1.0 Tff7b72/ Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffrelease_time Tff7b72* Tff7b72selfTff7b72.Td2a8ff_samplerateTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_hold_samples Tff7b72= Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhold_time Tff7b72* Tff7b72selfTff7b72.Td2a8ff_samplerateTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_attack_coeff Tff7b72= T79c0ff0.1
Tff7b72selfTff7b72.Td2a8ff_release_coeff Tff7b72= T79c0ff0.01
Tff7b72selfTff7b72.Td2a8ff_hold_samples Tff7b72= T79c0ff1000


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────